/**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   串口中断接收测试
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */ 
 
 
#include "stm32f10x.h"
#include "bsp_usart.h"
#include "bsp_SysTick.h"




#include "sys.h"
#include "bsp_i2c_ee.h"


#define  EEP_Firstpage      0x0000

uint8_t I2c_Buf_Write[4096];
uint8_t I2c_Buf_Read[4096];
uint8_t I2C_Test(void);

void RCC_Configuration(void)  
{  
    RCC_DeInit();//将外设 RCC寄存器重设为缺省值  
  
    RCC_HSICmd(ENABLE);//使能HSI    
    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功  
     
    RCC_HCLKConfig(RCC_SYSCLK_Div1);     
    RCC_PCLK1Config(RCC_HCLK_Div2);  
    RCC_PCLK2Config(RCC_HCLK_Div1);  
      
    //设置 PLL 时钟源及倍频系数  
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);//使能或者失能 PLL,这个参数可以取：ENABLE或者DISABLE   
    RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能  
    //等待指定的 RCC 标志位设置成功 等待PLL初始化成功  
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
  
    //设置系统时钟（SYSCLK） 设置PLL为系统时钟源  
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟   
    //等待PLL成功用作于系统时钟的时钟源  
    //  0x00：HSI 作为系统时钟   
    //  0x04：HSE作为系统时钟   
    //  0x08：PLL作为系统时钟    
    while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来，RCC_SYSCLKSource_PLL  
  
  
}  
/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{		
	SystemInit();
  /*初始化USART 配置模式为 115200 8-N-1，中断接收*/
	RCC_Configuration();
  USART_Config();
	SysTick_Init();
	/* 发送一个字符串 */
	Usart_SendString( DEBUG_USARTx,"串口中断接收回显实验\n\r");
	printf("\r\n I2C外设(AT24C256)读写测试例程 \r\n");

	/* I2C 外设初(AT24C256)始化 */
	I2C_EE_Init();
	 	 
  //EEPROM 读写测试
	if(I2C_Test() ==1)
	{
			printf("I2C Test OK\n\r");
	}
	else
	{
			printf("I2C Test Error\n\r");
	}
  while(1)
	{	
		
  }	
}


/**
  * @brief  I2C(AT24C02)读写测试
  * @param  无
  * @retval 正常返回1，异常返回0
  */
uint8_t I2C_Test(void)
{
	uint16_t i,j;
  j=0;
	printf("写入的数据\n\r");
  printf("%02d  ",j);
	for ( i=0; i<=4095; i++ ) //填充缓冲
  {   
    I2c_Buf_Write[i] = i&0x00ff;

    printf("0x%02X ", I2c_Buf_Write[i]);
    if(i%16 == 15)
		{
				j++;
        printf("\n\r");  
			 printf("%02d  ",j);
   }
 }

  //将I2c_Buf_Write中顺序递增的数据写入EERPOM中 
	I2C_EE_BufferWrite( I2c_Buf_Write, EEP_Firstpage, 4096);
  j=0;
  EEPROM_INFO("\n\r写成功\n\r");
   
   EEPROM_INFO("\n\r读出的数据\n\r");
	 printf("%02d  ",j);
  //将EEPROM读出数据顺序保持到I2c_Buf_Read中
	I2C_EE_BufferRead(I2c_Buf_Read, EEP_Firstpage, 4096); 
   
  //将I2c_Buf_Read中的数据通过串口打印
	for (i=0; i<=4095; i++)
	{	
		if(I2c_Buf_Read[i] != I2c_Buf_Write[i])
		{
			EEPROM_ERROR("0x%02X ", I2c_Buf_Read[i]);
			EEPROM_ERROR("错误:I2C EEPROM写入与读出的数据不一致\n\r");
			return 0;
		}
    printf("0x%02X ", I2c_Buf_Read[i]);
    if(i%16 == 15)
		{
			j++;
        printf("\n\r");
			  printf("%02d  ",j);
		}
    
	}
  EEPROM_INFO("I2C(AT24C256)读写测试成功\n\r");
  
  return 1;
}
/*********************************************END OF FILE**********************/
